/* * Collie - An asynchronous event-driven network framework using Dlang development * * Copyright (C) 2015-2017 Shanghai Putao Technology Co., Ltd * * Developer: putao's Dlang team * * Licensed under the Apache-2.0 License. * */ module collie.codec.messagetobyteencoder; import collie.channel.handler; import collie.channel; abstract class MessageToByteEncoder(M) : OutboundHandler!(M, ubyte[]) { ubyte[] encode(ref M msg); void callBack(ubyte[] data, size_t len); override void write(Context ctx, win msg, OutboundHandlerCallBack cback = null) { auto buf = encode(msg); if (buf.ptr) { ctx.fireWrite(buf, &callBack); if (cback) { import std.traits; static if (isArray!M) cback(msg, msg.length); else cback(msg, M.sizeof); } } else { if (cback) cback(msg, 0); } } }